12
תגובות

תאריך לפני ה 1/1/1970

פתח ldbrgr ,
אני בונה מערכת בסגנון רשת חברתית, עכשיו ללקוח יש תאריך לידה אבל התאריך לידה יכול להיות לפני ה 1/1/1970, וזה יוצר בעיה לאמת שהתראיך באמת קיים או אפילו לבדוק כמה זמן עבר (בן כמה הלקוח..), עברתי בגוגל אבל רוב הפתרונות שם ממש לא יעילות ולא ממש פותרות את הבעיה, פעם קראתי איזה ספר והם נתנו שם פתרון יפה אבל אני לא זוכר איזה ספר או איך הם עשו את זה...
בקיצור - למישהו יש המלצות? תודה :D

12 תשובות

avatar ענה intval ב 02 לדצמבר 2012 #

איזה בעיה יש לך עם תאריך?
נראה לי קראת באיזה ספר שיש בעיה עם תאריך כזה ומאז החלטת שיש לך בעיות עם תאריך כזה.

avatar ענה ldbrgr ב 02 לדצמבר 2012 #

נכון, הייתי בטוח שאי אפשר לעבוד עם תאריכים לפני ה 1/1/1970.
תודה D:

avatar ענה shlomo120 ב 02 לדצמבר 2012 #

דרך אגב , למה דווקא נבחר התאריך הזה ? זה מסמל משהו באופן סימבולי ?

avatar ענה intval ב 02 לדצמבר 2012 #

the beginning of the linux epoch

avatar ענה ldbrgr ב 04 לדצמבר 2012 #

זאת הפונקציה שאני עובד איתה (אם מישהו מגיע בעתיד מגוגל וכו'..)

<?php
 
  function age($birthday)
  {
    $age = date('Y') - date('Y', $birthday) - 1;
    if(date('z') >= date('z', $birthday))
    {
      $age++;
    }
    return $age;
  }
 
  function test_ago($timeString)
  {
    echo "Giving string: {$timeString}<br>";
    if($time = strtotime($timeString))
    {
      echo "Date: " . date("d.m.Y", $time) . "<br>" .
         "Age: " . age($time) . "<br>";
    }
    echo "<br>";
  }
 
  test_ago("today");
  test_ago("today + 1 day");
  test_ago("today - 1 day");
  test_ago("25.09.1994");
  test_ago("25.10.1994");
  test_ago("25.11.1994");
  test_ago("25.12.1994");
  test_ago("25.01.1995");


האופציה השניה (עדיפה מבחינת מהירות, אבל לא מבחינת דיוק אחרי גיל 70):
function age($birthday)
  {
    return date("Y", time() - $birthday) - 1970;
  }

avatar ענה intval ב 04 לדצמבר 2012 #

תודה על השיתוף.
זה הפונקציות שכל מתכנת טוב עובד איתם.

avatar ענה ldbrgr ב 04 לדצמבר 2012 #

"מתכנת טוב" יודע להבדיל מתי צריך לעבוד עם מחלקות כבדות ומתי אפשר לקרוא לפונקציה פשוטה.
במקרה שלי אני לא רוצה צורך ליצור אובייקט חדש.
גם מבחינת ביצועי המסד (לפחות בMYSQL) עדיף לשמור את הזמן על integer עם unix time.

avatar ענה intval ב 04 לדצמבר 2012 #

מתכנת טוב יודע להמציא תירוצים :)

avatar ענה ldbrgr ב 04 לדצמבר 2012 #

זה לא תירוץ, אני באמת לא רואה סיבה לעבוד עם DateTime במצב הנ"ל..
אתה היית עובד עם DateTime במצב הזה?..

avatar ענה intval ב 04 לדצמבר 2012 #

הייתי עובד איתו בכל מצב.
אין צורך לפחד מזה שקוראים לזה "מחלקה" או מזה שצריך ללמוד איך להשתמש בה.
זה חלק מהשפה שאתה מכתנת בה וכדאי שתכיר את הכלים הכי טובים שהשפה מספקת לך.
באיחוד כשהיא נותנת לך פתרון מוכן למה שאתה הולך לממש לבד.

avatar ענה mat ב 04 לדצמבר 2012 #

אין כזה דבר נכון או לא נכון בתיכנות יש כזה דבר עובד או לא עובד.

ממילא הסימון תשובה נכונה שגוי.

avatar ענה intval ב 04 לדצמבר 2012 #

זה כמו להגיד שאין בכביש דרך טובה להגיע לתל אביב
זה או מגיעים או לא מגיעים ואפשר להתעלם מזה שדרך אחת כוללת פקקים, שטח הררי, יותר קילומטרז' ורמזורים